/**
 * @class Ext.data.ArrayReader
 * @extends Ext.data.DataReader
 * 数组读到器,继承自数据读取器（Ext.data.DataReader）。
 * 该类的作用是将一个数组(该数组中的每个元素代表着一行数据字段，字段被放到Record对象中作为子脚本使用)转换成
 * Ext.data.Record的对象数组，字段定义的<em>mapping</em>属性如果存在，或字段在定义中的原始位置。<br>
 * <p>
 * 示范代码：
 * <pre><code>
var Employee = Ext.data.Record.create([
    {name: 'name', mapping: 1},         //"mapping"仅当有"id"字段出现时(排除了使用原始位置作为索引)需要
    {name: 'occupation', mapping: 2}    
]);
var myReader = new Ext.data.ArrayReader({
    id: 0                     // 下面的行数组内提供了该记录的id （可选的）
}, Employee);
</code></pre>
 * <p>
 * 假设数组是这样的：
 * <pre><code>
[ [1, 'Bill', 'Gardener'], [2, 'Ben', 'Horticulturalist'] ]
  </code></pre>
 * @cfg {String} id (可选项) 下面的行数组内提供了该记录的id
 * @constructor
 * 创建一新的ArrayReader
 * @param {Object} meta 元数据配置项.
 * @param {Object} recordType 既是一字段的字义指定对象的数组,又是通过{@link Ext.data.Record Record}的{@link Ext.data.Record#create}方法创建的Ext.data.Record对象
 */
Ext.data.ArrayReader = Ext.extend(Ext.data.JsonReader, {
	/**
     * 从XML document创建一包含Ext.data.Records的数据块
     * @param {Object} o 一代表着数据集的行对象数组
     * @return {Object} data 被Ext.data.Store对象当作Ext.data.Records 缓存的数据块
     */     
    readRecords : function(o){
        var sid = this.meta ? this.meta.id : null;
    	var recordType = this.recordType, fields = recordType.prototype.fields;
    	var records = [];
    	var root = o;
	    for(var i = 0; i < root.length; i++){
		    var n = root[i];
	        var values = {};
	        var id = ((sid || sid === 0) && n[sid] !== undefined && n[sid] !== "" ? n[sid] : null);
	        for(var j = 0, jlen = fields.length; j < jlen; j++){
                var f = fields.items[j];
                var k = f.mapping !== undefined && f.mapping !== null ? f.mapping : j;
                var v = n[k] !== undefined ? n[k] : f.defaultValue;
                v = f.convert(v);
                values[f.name] = v;
            }
	        var record = new recordType(values, id);
	        record.json = n;
	        records[records.length] = record;
	    }
	    return {
	        records : records,
	        totalRecords : records.length
	    };
    }
});